package br.ucb.sigplan.beans.service;

import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import br.ucb.sigplan.beans.Atividade;
import br.ucb.sigplan.beans.Calendario;
import br.ucb.sigplan.beans.Conteudo;
import br.ucb.sigplan.beans.Cronograma;
import br.ucb.sigplan.beans.Curso;
import br.ucb.sigplan.beans.Disciplina;
import br.ucb.sigplan.beans.PlanoEnsino;
import br.ucb.sigplan.beans.Login;
import br.ucb.sigplan.beans.Professor;
import br.ucb.sigplan.beans.Turma;
import br.ucb.sigplan.enuns.CalendarioEnum;
import br.ucb.sigplan.enuns.EnumTipoUsuario;
import br.ucb.sigplan.enuns.FormConteudo;
import br.ucb.sigplan.enuns.FormCurso;
import br.ucb.sigplan.enuns.FormDisciplina;
import br.ucb.sigplan.enuns.FormLogin;
import br.ucb.sigplan.enuns.FormPlano;
import br.ucb.sigplan.enuns.FormProfessor;
import br.ucb.sigplan.enuns.FormTurma;
import br.ucb.sigplan.util.DataUtil;
import br.ucb.sigplan.util.SenhaUtil;
import br.ucb.sigplan.util.TurmaUtil;

public class BeansUtil {
	public static void populateProfessor(Professor professor, HttpServletRequest req) {
		if (req.getParameter("idProfessor") != null) {
			professor.setIdProfessor(new Integer(req.getParameter("idProfessor")));
		}
		professor.setMatricula(req.getParameter(FormProfessor.matricula.toString()));
		professor.setNome(req.getParameter(FormProfessor.nome.toString()));
		professor.setEmail(req.getParameter(FormProfessor.email.toString()));
		if (req.getParameter("novaSenha") != null && !req.getParameter("novaSenha").isEmpty()) {
			professor.setSenha(req.getParameter("novaSenha"));
		}
		else if (req.getParameter("senha") != null) {
			professor.setSenha(req.getParameter(FormProfessor.senha.toString()));
		}else{
			professor.setSenha(SenhaUtil.geraSenha());
		}
		professor.setTipo(EnumTipoUsuario.findByValue(req.getParameter(FormProfessor.tipo.toString()).charAt(0)));
	}
	
	public static void populataNovaSenha(Professor professor, HttpServletRequest req) {
		Login login = (Login) req.getSession().getAttribute("login");
		professor.setEmail(login.getEmail());
		professor.setSenha(login.getSenha());
		professor.setTipo(login.getTipo());
	}
	
	public static void populateDisciplina(Disciplina disciplina, HttpServletRequest req) {
		if (req.getParameter("idDisciplina") != null) {
			disciplina.setIdDisciplina(new Integer(req.getParameter("idDisciplina")));
		}
		disciplina.setCodigoCurriculo(Integer.parseInt(req.getParameter(FormDisciplina.codigoCurriculo.toString())));
		disciplina.setContribuicao(req.getParameter(FormDisciplina.contribuicao.toString()));
		disciplina.setEmenta(req.getParameter(FormDisciplina.ementa.toString()));
		disciplina.setNome(req.getParameter(FormDisciplina.nome.toString()));
		disciplina.setObjetivoEspecifico(req.getParameter(FormDisciplina.objetivoEspecifico.toString()));
		disciplina.setObjetivoGeral(req.getParameter(FormDisciplina.objetivoGeral.toString()));
	}
	
	public static void populateCalendario(Calendario calendario, HttpServletRequest req) {
		calendario.setDescricao(req.getParameter(CalendarioEnum.descricao.toString()));
		calendario.setData(DataUtil.getDataFromString(req.getParameter("data")));
		calendario.setTipo(req.getParameter(CalendarioEnum.tipo.toString()).charAt(0));
	}
	
	public static void populateCalendario(Calendario calendario, HttpServletRequest req, String descricao, String label) {
		calendario.setDescricao(descricao);
		calendario.setData(DataUtil.getDataFromString(req.getParameter(label)));
		calendario.setTipo(req.getParameter(CalendarioEnum.tipo.toString()).charAt(0));
	}
	
	public static void populateCurso(Curso curso, HttpServletRequest req) {
		curso.setNome(req.getParameter(FormCurso.nome.toString()));
		curso.setCodigo(new Integer(req.getParameter(FormCurso.codigo.toString())));
		if (req.getParameter(FormCurso.id.toString()) != null) {
			curso.setIdCurso(new Integer(req.getParameter(FormCurso.id.toString())));
		}
	}
	
	public static void populateLogin(Login login, HttpServletRequest req) {
		login.setEmail(req.getParameter(FormLogin.email.toString()));
		login.setSenha(req.getParameter(FormLogin.senha.toString()));
		login.setTipo(EnumTipoUsuario.findByValue(req.getParameter("tipo").charAt(0)));
	}
	
	public static Login getLogin(HttpServletRequest req) {
		Login login = new Login();
		login.setEmail(req.getParameter(FormLogin.email.toString()));
		login.setSenha(req.getParameter(FormLogin.senha.toString()));
		login.setTipo(EnumTipoUsuario.findByValue(req.getParameter("tipo").charAt(0)));
		return login;
	}
	
	public static void populateTurma(Turma turma, HttpServletRequest req) {
		if (req.getParameter("idTurma") != null) {
			turma.setIdTurma(new Integer(req.getParameter("idTurma")));
		}
		turma.setAno(Integer.parseInt(req.getParameter(FormTurma.ano.toString())));
		turma.setCodigo(req.getParameter(FormTurma.codigo.toString()));
		turma.setHorario(req.getParameter(FormTurma.horario.toString()));
		turma.setSemestre(new Integer(req.getParameter(FormTurma.semestre.toString())));
		turma.setPeriodoMinistrado(req.getParameter(FormTurma.periodoMinistrado.toString()));
		turma.setProfessor(new Professor(Integer.parseInt(req.getParameter(FormTurma.professor.toString()))));
		turma.setDisciplina(new Disciplina(Integer.parseInt(req.getParameter(FormTurma.disciplina.toString()))));
		turma.setDiasSemana(TurmaUtil.getDiasSemana(Arrays.asList(req.getParameterValues(FormTurma.diaSemana.toString()))));
		turma.setCurso(new Curso(Integer.parseInt(req.getParameter(FormTurma.curso.toString()))));
	}
	public static void populateConteudo(Conteudo conteudo, HttpServletRequest req) {
		conteudo.setDescricao(req.getParameter(FormConteudo.descricao.toString()));
		conteudo.setTipo('C');
	}
	
	public static void populatePlano(PlanoEnsino plano, HttpServletRequest req) {
		if (req.getParameter("idPlano") != null) {
			plano.setIdPlano(new Integer(req.getParameter("idPlano")));
		}
		plano.setArticulacoes(req.getParameter(FormPlano.articulacoes.toString()));
		plano.setAvaliacoes(req.getParameter(FormPlano.avaliacoes.toString()));
		plano.setBibliografia(req.getParameter(FormPlano.bibliografia.toString()));
		plano.setMetodologia(req.getParameter(FormPlano.metodologia.toString()));
		plano.setRecursos(req.getParameter(FormPlano.recursos.toString()));
		plano.setTurma(new Turma((Integer) req.getSession().getAttribute("turma")));
	}
	
	public static void populateAtividades(List<Calendar> dias, List<Atividade> atividades, Integer idTurma) {
		for (Calendar dia : dias) {
			atividades.add(new Atividade(idTurma,dia));
		}
	}
	
	@SuppressWarnings("unchecked")
	public static Cronograma getCronograma(HttpServletRequest req) {
		Cronograma cronograma = new Cronograma();
		cronograma.setCronograma((Map<Atividade, List<Conteudo>>) req.getSession().getAttribute("cronograma"));
		return cronograma;
	}
}
